package com.developer.persistence.modulo.partidos;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.developer.core.utils.SimpleLogger;
import com.developer.logic.modulo.grupos.dto.Grupo;
import com.developer.logic.modulo.partidos.dto.AlineacionPartido;
import com.developer.logic.modulo.partidos.dto.CambioPartido;
import com.developer.logic.modulo.partidos.dto.FaltaPartido;
import com.developer.logic.modulo.partidos.dto.GolesPartido;
import com.developer.logic.modulo.partidos.dto.Partido;
import com.developer.logic.modulo.partidos.dto.PartidoJuez;
import com.developer.logic.modulo.partidos.dto.TarjetasPartido;
import com.developer.logic.modulo.partidos.dto.TirosPartido;
import com.developer.mybatis.DBManager;
import com.developer.persistence.modulo.partidos.mapper.dao.PartidoDao;

public class PartidoControllerDB {
	
	private static PartidoControllerDB instance;
	
	public static PartidoControllerDB getInstance() {
		if (instance == null) {
			instance = new PartidoControllerDB();
		}
		
	
		return instance;
	}
	
	public List<Partido> getPartidosPorGrupo(Grupo grupo){
		SqlSession session = DBManager.openSession();

		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			List<Partido> list = PartidoMapper.getPartidosPorGrupo(grupo);

			return list;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getPartidosPorGrupo", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
		
	}
	
	public boolean programarPartidoTransaccional(SqlSession session, Partido partido){
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea el Partido
			PartidoDao.programarPartido(partido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error programarPartidoTransaccional", e);
			return false;
		}
		
		
	}
	
	
	public boolean finalizarPartidoTransaccional(SqlSession session, Partido partido){
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea el Partido
			PartidoDao.finalizarPartido(partido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error finalizarPartidoTransaccional", e);
			return false;
		}
		
		
	}

	public boolean crearAlineacionPartidoTransaccional(SqlSession session, AlineacionPartido alineacionPartido) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea  Alineacion Partido
			PartidoDao.crearAlienacionPartido(alineacionPartido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 
	

	public boolean crearCambioPartidoTransaccional(SqlSession session, CambioPartido cambioPartido) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea Cambios Partido
			PartidoDao.crearCambioPartido(cambioPartido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 

	public boolean crearFaltaPartidoTransaccional(SqlSession session, FaltaPartido faltaPartido) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea Falta Partido
			PartidoDao.crearFaltaPartido(faltaPartido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 

	public boolean crearGolesPartidoTransaccional(SqlSession session, GolesPartido golesPartido) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea goles Partido
			PartidoDao.crearGolesPartido(golesPartido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 

	public boolean crearPartidoJuezTransaccional(SqlSession session, PartidoJuez partidoJuez) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea Partido Juez
			PartidoDao.crearPartidoJuez(partidoJuez);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 

	public boolean crearTarjetasPartidoTransaccional(SqlSession session, TarjetasPartido tarjetasPartido) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea Tarjetas Partido
			PartidoDao.crearTarjetasPartido(tarjetasPartido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 

	public boolean crearPartidoTransaccional(SqlSession session, Partido partido) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea el Partido
			PartidoDao.crearPartido(partido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 
	
	public boolean crearTirosPartidoTransaccional(SqlSession session, TirosPartido tirosPartido) {
		try{
			PartidoDao PartidoDao = session.getMapper(PartidoDao.class);
			
			//Se crea Tiros Partido
			PartidoDao.crearTirosPartido(tirosPartido);
			
			return true;
		
		}catch (Exception e) {
			SimpleLogger.error("Error crearPartidoTransaccional", e);
			return false;
		}
	} 
	
	public Long getSiguienteIDAlineacionPartidoTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDAlineacionPartido();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	public Long getSiguienteIDCambioPartidoTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDCambioPartido();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	public Long getSiguienteIDFaltaPartidoTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDFaltaPartido();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	public Long getSiguienteIDGolesPartidoTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDGolesPartido();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	public Long getSiguienteIDPartidoTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDPartido();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	public Long getSiguienteIDPartidoJuezTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDPartidoJuez();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	public Long getSiguienteIDTarjetasPartidoTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDTarjetasPartido();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	public Long getSiguienteIDTirosPartidoTransaccional(SqlSession session){
		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Long id = PartidoMapper.getSiguienteIDTirosPartido();

			return id;
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getSiguienteIDPartidoTransaccional", e);
			
			return null;
			
		} 
		
	}
	
	public Partido getPartido(Long partido){
		SqlSession session = DBManager.openSession();

		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			Partido partidoConsultado = PartidoMapper.getPartido(partido);

			return partidoConsultado;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getPartido", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
	}
	
	public List<Partido> getPartidosPorGrupoPorProgramar(Grupo grupo){
		SqlSession session = DBManager.openSession();

		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			List<Partido> partidos= PartidoMapper.getPartidosPorGrupoPorProgramar(grupo);

			return partidos;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getPartidosPorGrupoPorProgramar", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
	}
	
	public List<Partido> getPartidosPorGrupoSinFinalizar(Grupo grupo){
		SqlSession session = DBManager.openSession();

		try {

			PartidoDao PartidoMapper = session.getMapper(PartidoDao.class);
			List<Partido> partidos= PartidoMapper.getPartidosPorGrupoSinFinalizar(grupo);

			return partidos;	
		}catch (Exception e) {
			SimpleLogger.error("Error consultando getPartidosPorGrupoSinFinalizar", e);
			
			return null;
			
		} finally {
			session.close();
		}
		
	}
	
}
	